import {request} from '../../request/index.js';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 收货地址
    address:{},
    // 购物车数据
    cart:[],
    // 全选状态 -默认不选中
    allchecked:false,
    // 总价格
    totalPrice:0,
    // 总数量
    totalNum:0,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  onShow(){
    // 1.获取缓存中的收货地址
    const address = wx.getStorageSync('address');

    //A.获取缓存中的购物车数据
    const cart = wx.getStorageSync('cart')||[];
    //A-1.计算全选。只要当所有商品的checked属性都是true 才是全选
      // every：数组介绍
      // every 方法是数组方法。会接受一个回调函数。必须确保每一个回调函数都返回true，这个方法的返回值 就是true。
      // 但是只要有一个为false，就会返回false.
      // 如果是空数组 调用 every 返回值就为 true;

    // 用三元判断：当cart数组不空时且数组中每项的 checked 值为true时
    // const allchecked = cart.length?cart.every(v=>v.checked):false;

    // // B:总价格总数量
    // let totalPrice = 0;
    // let totalNum = 0;
    // // 优化新能：把全选放入
    // let allchecked=true;

    // // 如果cart 为空的之后 不执行下面的forEach-这时候 allchecked 为true
    // cart.forEach(v => { 
    //     if(v.checked){
    //       // 如果被选中的时候 
    //       // 总价格：
    //       totalPrice+=v.num*v.goods_price;
    //       // 总数量：
    //       totalNum+=v.num;
    //     }
    //     else{
    //       // 未被选中
    //       allchecked=false;
    //     }
    // });
    // // 在这个判断- 数组是否为空？如果不是空 就让他等于他本身也就是true;如果为空就设置为false
    // allchecked=cart.length?allchecked:false;

    // // 2、给data 赋值
    // this.setData({
    //   address,
    //   cart,
    //   allchecked,
    //   totalPrice,
    //   totalNum
    // })

    // 调用下面setCart方法
    this.setCart(cart);

    this.setData({
      address
    })
    
  },
  // 点击收货地址
  handleChooseAddress(){
    // 1.获取权限状态
    wx.getSetting({
      success: (result) => {
        console.log(result);
        // 2.获取权限状态 主要发现一些 属性名很怪异的时候，要使用【】形式来获取属性值
        const scopeAddress = result.authSetting["scope.address"];
        if(scopeAddress===true||scopeAddress===undefined){
          wx.chooseAddress({
            success: (res) => {
              console.log(res)
              wx.setStorageSync('address', res);
            }
          });
        }
        else{
          // 3.用户以前拒绝过授予权限.先诱导用户打开权限
          wx.openSetting({
            success: (result2) => {
              // 4.可以调用 收货地址代码了
              wx.chooseAddress({
                success: (result3) => {
                  wx.setStorageSync('address', result3);
                }
              });
            }
          });
        }
      },
      fail: () => {},
      complete: () => {}
    });
  },
  // C.商品选中
  handeItemChange(e){
    // c.1获取商品值
    const goods_id=e.currentTarget.dataset.id;
    console.log(goods_id);
    // c2.获取购物车数组
    let {cart}=this.data;
    // C3.找到被修改的商品对象
    let index=cart.findIndex(v=>v.goods_id===goods_id);
    // c.4 选中状态取反
    cart[index].checked=!cart[index].checked;  
    // 调用setCart值
    this.setCart(cart);
  },
  // 设置购物车状态同时重新计算底部工具栏的 全选.总价格 总数量
  setCart(cart){
    // c.7 重新计算总价格和总数量 调用B中的方法过程  （可以把他封装一下）
      // B:总价格总数量
      let totalPrice = 0;
      let totalNum = 0;
      // 优化新能：把全选放入
      let allchecked=true;
      // 如果cart 为空的之后 不执行下面的forEach-这时候 allchecked 为true
      cart.forEach(v => { 
        if(v.checked){
          // 如果被选中的时候 
          // 总价格：
          totalPrice+=v.num*v.goods_price;
          // 总数量：
          totalNum+=v.num;
        }
        else{
          // 未被选中
          allchecked=false;
        }
      });
      // 在这个判断- 数组是否为空？如果不是空 就让他等于他本身也就是true;如果为空就设置为false
      allchecked=cart.length?allchecked:false;

    //C.last 最后赋值
    this.setData({
      cart,totalPrice,totalNum,allchecked
    });
    wx.setStorageSync('cart',cart);
  },
  // D.商品全选功能
  handleItemAllChange(){
    // D.1.获取data中的数据
    let {cart,allchecked} =this.data;
    // D.2.修改allchecked 值 取反
    allchecked=!allchecked;
    // D.3.修改Cart数组中的商品选中状态
    cart.forEach(v=>v.checked=allchecked);
    // D.4 把修改后的值 填充会data中和缓存中-当然也包括总价格和总数量
    this.setCart(cart);
  },
  // E.修改商品数量
  handleItemEdit(e){
    console.log(e);
    // E.1 获取 点击的商品goods_id 和 数字+-
    let goods_id = e.currentTarget.dataset.id;
    let operation =e.currentTarget.dataset.operation;
    // E.2 获取购物车数组
    let {cart} =this.data;
    // E.3 从数组中选出当前点击的 项。
    let index = cart.findIndex(v=>v.goods_id===goods_id);
    
    // E.4.0 如果当数字为1时，同时点击减号符；这俩个条件同时满足则是删除商品操作
    if(cart[index].num===1&&operation===-1){
      // 弹窗提示
      wx.showModal({
        title: '您是否要删除',  
        success: (result) => {
          if (result.confirm) {
            // 删除数组 重新计算价格和数量
            cart.splice(index,1);
            this.setCart(cart);
          }
        }
      });        
    }
    else{
      // E.4给当前项  加上 或者减去 数 如果 operation 为-1  就是加  为1就是减去
      cart[index].num += operation;
      // E.5 改变数量就会改变总价格和总数量 赋值给data 和 缓存中
      this.setCart(cart);
    }
  },
  // F.点击结算页面
  handlePay(){
    // F.1 判断有无收货地址
    let {address} =this.data;
    if(!address.userName){
      wx.showToast({title: '您还没有选择收货地址',icon:'none',});
      return;
    }
    // F.2 判断用户有没有选购商品的
    let {totalNum}=this.data;
    if(totalNum==0){
      wx.showToast({title: '您还没有选购商品',icon: 'none'});
      return;
    }
    // F.3 跳转到微信支付页面
    wx.navigateTo({
      url: '/pages/pay/index'
    });
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
        
  }
})